#!/bin/sh

MODULE_NAME=transparentMode
MODULE_DEFAULTS=/opt/$MODULE_NAME/etc/defaults
MODULE_SETTINGS=/opt/$MODULE_NAME/etc/settings
[ -L "$MODULE_SETTINGS" ] && MODULE_SETTINGS=`readlink $MODULE_SETTINGS`

[ -f "$MODULE_SETTINGS" ] || cp $MODULE_DEFAULTS $MODULE_SETTINGS
[ -x "/sbin/hash_verify" ] && [ ! -f "$MODULE_SETTINGS.hash" ] && cp $MODULE_DEFAULTS.hash $MODULE_SETTINGS.hash

if [ -x "/sbin/hash_generate" ]
then
  etc_dir="/var/etc/"
  dhcp_config_dir="/run/dhcp"
else
  etc_dir="/etc/"
  dhcp_config_dir="/var/dhcp"
fi
persistent_dir="/var/data/transparentMode/"

case "$1" in

  start)
    echo -n "Starting module Transparent mode: "
    [ -x "/sbin/hash_verify" ] && ! hash_verify $MODULE_SETTINGS && exit 1
    . $MODULE_SETTINGS
    if [ "$MOD_TRANSPARENTMODE_ENABLED" != "1" ]; then
      echo "skipped"
      exit 0
    fi
    mkdir -p $persistent_dir
    if [ ! -f $persistent_dir/setting-nat.orig ]; then
      grep 'ETH_DHCP_POOL_ENABLED=' $etc_dir/settings.eth > $persistent_dir/setting-eth-dhcp.orig
      grep 'NAT_MASQUERADE=' $etc_dir/settings.nat > $persistent_dir/setting-nat.orig
    fi
    # Vypnuti vychoziho DHCP serveru a NATu
    if grep -q "ETH_DHCP_POOL_ENABLED=1" $etc_dir/settings.eth
    then
      sed -e "s/\(ETH_DHCP_POOL_ENABLED=\).*/\10/" -i $etc_dir/settings.eth
      if [ -x "/sbin/hash_generate" ]
      then
        /sbin/hash_generate $etc_dir/settings.eth
      fi
    fi
    if grep -q "NAT_MASQUERADE=1" $etc_dir/settings.nat
    then
      sed -e "s/\(NAT_MASQUERADE=\).*/\10/" -i $etc_dir/settings.nat
      if [ -x "/sbin/hash_generate" ]
      then
        /sbin/hash_generate $etc_dir/settings.nat
      fi
      service nat restart
    fi
    # Zapnuti transparentniho rezimu
    service ppp restart
    echo "done"
    exit 0
  ;;

  stop)
    echo -n "Stopping module Transparent mode: "
    # Obnoveni vychozi konfigurace
    if [ -f $persistent_dir/setting-nat.orig -a "$(grep 'NAT_MASQUERADE=' $etc_dir/settings.nat)" != "$(cat $persistent_dir/setting-nat.orig)" ]
    then
      grep -v 'NAT_MASQUERADE=' $etc_dir/settings.nat > $etc_dir/settings.nat.new
      cat $persistent_dir/setting-nat.orig >> $etc_dir/settings.nat.new
      mv $etc_dir/settings.nat.new $etc_dir/settings.nat
      if [ -x "/sbin/hash_generate" ]
      then
        /sbin/hash_generate $etc_dir/settings.nat
      fi
      service nat restart
    fi
    if [ -f $persistent_dir/setting-eth-dhcp.orig -a "$(grep 'ETH_DHCP_POOL_ENABLED=' $etc_dir/settings.eth)" != "$(cat $persistent_dir/setting-eth-dhcp.orig)" ]
    then
      grep -v 'ETH_DHCP_POOL_ENABLED=' $etc_dir/settings.eth > $etc_dir/settings.eth.new
      cat $persistent_dir/setting-eth-dhcp.orig >> $etc_dir/settings.eth.new
      mv $etc_dir/settings.eth.new $etc_dir/settings.eth

      if [ -x "/sbin/hash_generate" ]
      then
        /sbin/hash_generate $etc_dir/settings.eth
      fi
    fi
    rm -f "$persistent_dir/setting-eth-dhcp.orig" "$persistent_dir/setting-nat.orig"
    # Vypnuti proxy arp
    echo 0 > /proc/sys/net/ipv4/conf/eth0/proxy_arp
    if [ -f /run/transparentMode/wan_interface ]
    then
      dev=$(cat /run/transparentMode/wan_interface)
      rm /run/transparentMode/wan_interface
      if [ -n "$dev"]
      then
        echo 0 > /proc/sys/net/ipv4/conf/$dev/proxy_arp
      fi
    fi
    # Obnoveni konfigurace eth rozhranni
    ifconfig eth0:0 down
    killall dhcpd
    rm /var/run/dhcpd.pid
    rm $dhcp_config_dir/dhcpd.leases
    service eth restart
    # Obnoveni konfigurace ppp rozhranni
    service ppp restart
    echo "done"
    exit 0
  ;;

  restart)
    $0 stop
    $0 start
  ;;

  status)
    if [ -f $persistent_dir/setting-nat.orig ]; then
      if [ -f /run/transparentMode/wan_interface ]; then
        echo "Transparent mode is configured and it is used for $(cat /run/transparentMode/wan_interface)."
      else
        echo "Transparent mode is configured but it is not used."
      fi
    else
      echo "Transparent mode is OFF."
    fi
    exit 0
  ;;

  defaults)
    cp $MODULE_DEFAULTS $MODULE_SETTINGS 2>/dev/null
    [ -f "$MODULE_DEFAULTS.hash" ] && cp $MODULE_DEFAULTS.hash $MODULE_SETTINGS.hash
    exit 0
  ;;

  *)
    echo "Usage: $0 {start|stop|restart|status|defaults}"
    exit 1
  ;;

esac
